package com.tcc.fastline.Domain;

import java.util.Date;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;

public class Fila {
	
	@SerializedName("id")
	private Integer codigo;
	
	@SerializedName("estabelecimento")
	private Estabelecimento estabelecimento;
	@SerializedName("dataInicioFila")
	private Date dataInicio;
	@SerializedName("dataFimFila")
	private Date dataFim;
	
	@SerializedName("tempoEsperaMedio")
	private Integer tempoEspera;
	
	public Fila(){
	}
	
	public Fila(String jSon){
		Gson gson;
		try {
			gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
			Fila fila = gson.fromJson(jSon, Fila.class);
			
			this.setCodigo(fila.getCodigo());
			this.setDataFim(fila.getDataFim());
			this.setDataInicio(fila.getDataInicio());
			this.setEstabelecimento(fila.getEstabelecimento());
			this.setTempoEspera(fila.getTempoEspera());
			
		} catch (Exception e) {
			throw new RuntimeException("Erro ao gerar a fila recebido do webservice, motivo: " + e.getMessage());
		}
		
	}
	
	@Override
	public String toString() {
		String json = "";
		try {
			Gson gson = new Gson();
			json = gson.toJson(this);
		} catch (Exception e) {
			throw new RuntimeException(
					"Erro ao gerar Fila para envio ao webservice, motivo: "
							+ e.getMessage());
		}
		return json;
	}
	
	public boolean isValid(){
		return (this != null && 
				this.getEstabelecimento().isValid());
	}
	
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public Estabelecimento getEstabelecimento() {
		return estabelecimento;
	}
	public void setEstabelecimento(Estabelecimento estabelecimento) {
		this.estabelecimento = estabelecimento;
	}
	public Date getDataInicio() {
		return dataInicio;
	}
	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}
	public Date getDataFim() {
		return dataFim;
	}
	public void setDataFim(Date dataFim) {
		this.dataFim = dataFim;
	}
	public Integer getTempoEspera() {
		return tempoEspera;
	}
	public void setTempoEspera(Integer tempoEspera) {
		this.tempoEspera = tempoEspera;
	}
}
